 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <mysql/mysql.h>

// 数据库配置信息可以从配置文件中获取，并完成数据库的基本配置
#define DATA_BASE "park"
#define DATA_BASE_ACCOUNT "root"
#define DATA_BASE_PASSWD "123"

/*
	专项查询
*/
int mysql_select_passwd_by_name(const char *name, char *passwd)
{
	// step1 初始化连接句柄
	MYSQL * conn;
	conn = mysql_init(NULL);
	if (conn == NULL) {
		printf("mysql init failed\n");
		return -1;
	}
	// step2 与mysql建立连接
	conn = mysql_real_connect(conn, NULL, DATA_BASE_ACCOUNT, DATA_BASE_PASSWD, DATA_BASE, 3306, "/var/run/mysqld/mysqld.sock",0); // 本地高效连接,使用unix_socket
	if (conn == NULL) {
		printf("mysql connect failed\n");
		return -1;
	}
	
	if (0 != mysql_query(conn, "SET NAMES utf8")) {// 设置中文字符集
		printf("mysql query failed\n");
	}
	// step3 执行sql语句
	int ret;
	char sql_buf[128] = "";
	sprintf(sql_buf, "select passwd from user where name = '%s'", name);
	ret = mysql_query(conn, sql_buf); // 执行sql语句
	if (ret != 0) {
		printf("mysql query failed\n");
	}
	
	// step4 存储查询结果
	MYSQL_RES *res;
	res = mysql_store_result(conn); // 存储查询结果
	if (res == NULL) {
		printf("存储结果失败\n");
	}
	
	// step5 读取结果集
	unsigned long long rows;
	rows = mysql_num_rows(res); // 获取结果集的行数
	if (rows == 0) { // 该名字不在表中
		printf("no user\n");
		goto over;
	}
	
	MYSQL_ROW row; // typedef char[][] MYSQL_ROW;
	if(NULL != (row = mysql_fetch_row(res))) { // 获取一行结果
		if (row[0] == NULL) {
			printf("由于该列值为NULL，所以返回空指针\n");
		} else {
			strcpy(passwd, row[0]);
		}
	}
	
over:
	// step5 结果空间释放
	mysql_free_result(res);
	// step6 断开连接
	mysql_close(conn);
	return 0;
}

/*
数据库查询：
*/
int mysql_select(const char *db, const char *tb, const char *name, const char *passwd)
{
	// step1 初始化连接句柄
	MYSQL * conn;
	conn = mysql_init(NULL);
	if (conn == NULL) {
		printf("mysql init failed\n");
		return -1;
	}
	// step2 与mysql建立连接
	//conn = mysql_real_connect(conn, "l92.168.1.117", "root", "123456", db, 3306, NULL,0); // 本地连接
	//conn = mysql_real_connect(conn, "192.168.1.117", "root", "123456", "park", 3306, NULL,0); // 远程连接方式
	conn = mysql_real_connect(conn, NULL, "root", "123", db, 3306, "/var/run/mysqld/mysqld.sock",0); // 本地高效连接,使用unix_socket
	
	if (conn == NULL) {
		printf("mysql connect failed\n");
		return -1;
	}

	// step3 执行sql语句
	int ret;
	//printf("请输入识别到的车牌号：");
	mysql_query(conn, "SET NAMES utf8"); // 设置中文字符集

	char sql_buf[128] = "";
	sprintf(sql_buf, "select * from %s where name = '%s'", tb, name);
	ret = mysql_query(conn, sql_buf); // 执行sql语句
	if (ret != 0) {
		printf("mysql query failed\n");
	}
	MYSQL_RES *res;
	res = mysql_store_result(conn); // 存储查询结果
	if (res == NULL) {
		printf("存储结果失败\n");
	}
	
	unsigned long long rows;
	rows = mysql_num_rows(res); // 获取结果集的行数
	if (rows == 0) { // 该名字不在表中
		printf("no user\n");
		// step4 结果空间释放
		mysql_free_result(res);
		// step5 断开连接
		mysql_close(conn);
		return -1;
	}
	
	unsigned int count;
	count = mysql_field_count(conn);
	printf("count = %d\n", count);
	
	unsigned int fields;
	fields = mysql_num_fields(res);
	printf("fields : %d\n", fields);
	
	MYSQL_ROW row; // typedef char[][] MYSQL_ROW;
	int flag = -1;
	
	printf("debug1\n");
	while (NULL != (row = mysql_fetch_row(res))) { // 获取一行结果
		if (row[2] == NULL) {
			printf("由于该列值为NULL，所以返回空指针\n");
			continue;
		}
		if (0 == strcmp(row[2], passwd)) {
			printf("passwd error\n");
			flag = 0;
		}
	}
	printf("debug2\n");
	// step4 结果空间释放
	mysql_free_result(res);
	// step5 断开连接
	mysql_close(conn);
	
	return flag;
}
